﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ProjControleBLL;
using ProjControleModelos;

namespace ProjControle
{
    public partial class frm_cadastro_produto : Form
    {
        Char tipo_controle;
        public frm_cadastro_produto()
        {
            InitializeComponent();
        }
        #region Métodos
        public Produtos carregaPropriedades()
        {
            Produtos objP = new Produtos();
            try
            {
                
            if (tbCodigo.Text == "")
                objP.cod_produto = 0;
            else
                objP.cod_produto = int.Parse(tbCodigo.Text);
            objP.cod_grupo = int.Parse(tbCodGrupo.Text);
            objP.cod_marca = int.Parse(tbCodMarca.Text);
            objP.cod_interno_prod = tbCodBarras.Text;
            objP.descricao_produto = tbDescricao.Text;
            objP.preco_compra = Double.Parse(tbValorCompra.Text.Replace("R$",""));
            objP.preco_venda = Double.Parse(tbValorVenda.Text.Replace("R$",""));
            objP.qntd_produto = int.Parse(tbQuantidade.Text);
            objP.qntd_minima = int.Parse(tbQntdMinima.Text);
            if (tbComissao.Text != "")
                objP.comissao = Double.Parse(tbComissao.Text);
            else
                objP.comissao = 0;
            objP.dt_compra = dtCadastro.Value;
            if (cbStatus.Checked == true)
                objP.status_produto = "Disponivel";
            else
                objP.status_produto = "Indisponivel";
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
            return objP;
        }
        public void carregaLabelMarca(Produtos objP)
        {
            MarcasBLL objMarcas = new MarcasBLL();
            Marcas objM = new Marcas();
            try
            {
                if (objP.cod_marca != 0)
                    objM = objMarcas.localizar(objP.cod_marca);
                if (objM.cod_marca != 0)
                    lNome_marca.Text = objM.descricao_marca;
 
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }
        public void carregaLabelGrupo(Produtos objP)
        {
            GruposBLL objGrupo = new GruposBLL();
            Grupos objG = new Grupos();
            try
            {
                if (objP.cod_marca != 0)
                    objG = objGrupo.localizar(objP.cod_grupo);
                if (objG.cod_grupo != 0)
                    lNome_grupo.Text = objG.descricao_grupo;

            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }
        public void carregaCampos(Produtos objP)
        {
            try
            {
                tbCodBarras.Text = objP.cod_interno_prod.ToString();
                tbCodigo.Text = objP.cod_produto.ToString();
                tbCodGrupo.Text = objP.cod_grupo.ToString();
                tbCodMarca.Text = objP.cod_marca.ToString();
                tbDescricao.Text = objP.descricao_produto;
                tbQntdMinima.Text = objP.qntd_minima.ToString();
                tbQuantidade.Text = objP.qntd_produto.ToString();
                tbValorCompra.Text = objP.preco_compra.ToString("C");
                tbValorVenda.Text = objP.preco_venda.ToString("C");
                dtCadastro.Value = objP.dt_compra;
                tbComissao.Text = objP.comissao.ToString();
                if (objP.status_produto == "Disponivel")
                    cbStatus.Checked = true;
                else
                    cbStatus.Checked = false;
                carregaLabelGrupo(objP);
                carregaLabelMarca(objP);
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }
        public void inserir()
        {
            tipo_controle = 'I';
            tbCodBarras.Enabled = true;
            tbCodGrupo.Enabled = true;
            tbCodMarca.Enabled = true;
            tbComissao.Enabled = true;
            tbDescricao.Enabled = true;
            tbQntdMinima.Enabled = true;
            tbQuantidade.Enabled = true;
            tbValorCompra.Enabled = true;
            tbValorVenda.Enabled = true;
            dtCadastro.Enabled = true;
            cbStatus.Enabled = true;
            //botoes
            bIncluir.Enabled = false;
            bAlterar.Enabled = false;
            bExcluir.Enabled = false;
            bSalvar.Enabled = true;
            bCancelar.Enabled = true;
            bVoltar.Enabled = false;
            bMarcas.Enabled = true;
            bGrupo.Enabled = true;
            gbLocalizar.Enabled = false;
        }
        public void alterar()
        {
            tipo_controle = 'A';
            tbCodBarras.Enabled = true;
            tbCodGrupo.Enabled = true;
            tbCodMarca.Enabled = true;
            tbComissao.Enabled = true;
            tbDescricao.Enabled = true;
            tbQntdMinima.Enabled = true;
            tbQuantidade.Enabled = true;
            tbValorCompra.Enabled = true;
            tbValorVenda.Enabled = true;
            cbStatus.Enabled = true;
            //botoes
            bIncluir.Enabled = false;
            bAlterar.Enabled = false;
            bExcluir.Enabled = false;
            bSalvar.Enabled = true;
            bCancelar.Enabled = true;
            bMarcas.Enabled = true;
            bGrupo.Enabled = true;
            bVoltar.Enabled = false;
            gbLocalizar.Enabled = false;
        }
        public void limpar()
        {
            tbCodBarras.Text = "";
            tbCodGrupo.Text = "";
            tbCodigo.Text = "";
            tbCodMarca.Text = "";
            tbComissao.Text = "";
            tbDescricao.Text = "";
            tbLocalizar.Text = "";
            tbQntdMinima.Text = "";
            tbQuantidade.Text = "";
            tbValorCompra.Text = "";
            tbValorVenda.Text = "";
            lNome_grupo.Text = "";
            lNome_marca.Text = "";
            tbCodBarras.Enabled = false;
            tbCodGrupo.Enabled = false;
            tbCodMarca.Enabled = false;
            tbComissao.Enabled = false;
            tbDescricao.Enabled = false;
            tbQntdMinima.Enabled = false;
            tbQuantidade.Enabled = false;
            tbValorCompra.Enabled = false;
            tbValorVenda.Enabled = false;
            cbStatus.Enabled = false;
            cbStatus.Checked = false;
            dtCadastro.Enabled = false;
            dtCadastro.Value = DateTime.Now;
            dgProdutos.DataSource = null;
            associaGrid();
            dgProdutos.Enabled = true;
            bIncluir.Enabled = true;
            bAlterar.Enabled = false;
            bExcluir.Enabled = false;
            bSalvar.Enabled = false;
            bCancelar.Enabled = true;
            bVoltar.Enabled = true;
            bMarcas.Enabled = false;
            bGrupo.Enabled = false;
            gbLocalizar.Enabled = true;
        }
        public void frm_load()
        {
            tbCodBarras.Enabled = false;
            tbCodGrupo.Enabled = false;
            tbCodigo.Enabled = false;
            tbCodMarca.Enabled = false;
            tbComissao.Enabled = false;
            tbDescricao.Enabled = false;
            tbQntdMinima.Enabled = false;
            tbQuantidade.Enabled = false;
            tbValorCompra.Enabled = false;
            tbValorVenda.Enabled = false;
            cbStatus.Enabled = false;
            lNome_grupo.Text = "";
            lNome_marca.Text = "";
            //botoes
            bIncluir.Enabled = true;
            bAlterar.Enabled = false;
            bExcluir.Enabled = false;
            bMarcas.Enabled = false;
            bGrupo.Enabled = false;
            bSalvar.Enabled = false;
            bCancelar.Enabled = true;
            bVoltar.Enabled = true;
            associaGrid();
        }
        public void associaGrid()
        {
            DataTable tab;
            try
            {
                tab = new DataTable();
                tab.Columns.Add("cod_produto");
                tab.Columns.Add("descricao_produto");
                tab.Columns.Add("cod_marca");
                tab.Columns.Add("cod_grupo");
                tab.Columns.Add("cod_interno_prod");
                tab.Columns.Add("qtd_prod");
                tab.Columns.Add("preco_Venda");
                dgProdutos.DataSource = tab;
                dgProdutos.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                dgProdutos.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                dgProdutos.AllowUserToAddRows = false;
                dgProdutos.AllowUserToResizeRows = false;
                dgProdutos.AllowUserToResizeColumns = false;
                dgProdutos.Columns["cod_produto"].HeaderText = "Código";
                dgProdutos.Columns["cod_produto"].Width = 70;
                dgProdutos.Columns["descricao_produto"].HeaderText = "Descrição";
                dgProdutos.Columns["descricao_produto"].Width = 250;
                dgProdutos.Columns["cod_marca"].Visible = false;
                dgProdutos.Columns["cod_grupo"].Visible = false;
                dgProdutos.Columns["cod_interno_prod"].Visible = false;
                dgProdutos.Columns["qtd_prod"].Visible = false;
                dgProdutos.Columns["preco_Venda"].Visible = false;
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }
        #endregion

        private void frm_cadastro_produto_Load(object sender, EventArgs e)
        {
            frm_load();
        }

        private void bIncluir_Click(object sender, EventArgs e)
        {
            inserir();
        }

        private void bAlterar_Click(object sender, EventArgs e)
        {
            alterar();
        }

        private void bCancelar_Click(object sender, EventArgs e)
        {
            limpar();
        }

        private void bVoltar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void bExcluir_Click(object sender, EventArgs e)
        {
            ProdutosBLL objBLL = null;
            Produtos objP = null;
            try
            {
                if (MessageBox.Show("Deseja Excluir?", "Mensagem", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                {
                    objBLL = new ProdutosBLL();
                    objP = carregaPropriedades();
                    objBLL.excluir(objP);
                    MessageBox.Show("Excluido com Sucesso", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    limpar();
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
            objBLL = null;
            objP = null;
        }

        private void bSalvar_Click(object sender, EventArgs e)
        {
            ProdutosBLL objBLL = null;
            Produtos objP = null;
            try
            {
                objP = carregaPropriedades();
                objBLL = new ProdutosBLL();
                if (tipo_controle == 'I')
                    objBLL.inserir(objP);
                else
                    objBLL.alterar(objP);

                MessageBox.Show("Salvo com Sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                bCancelar_Click(sender, e);
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
            objBLL = null;
        }

        private void bGrupo_Click(object sender, EventArgs e)
        {
            GruposBLL objBLL;
            Grupos objG;
            try
            {
            frm_consultar frm = new frm_consultar();
            frm.Text = "Consultar Grupos";
            frm.controle = "Grupos";
            frm.ShowDialog();
            if (frm.codigo != 0)
            {
                objBLL = new GruposBLL();
                objG = objBLL.localizar(frm.codigo);
                if (objG.cod_grupo != 0)
                {
                    tbCodGrupo.Text = objG.cod_grupo.ToString();
                    lNome_grupo.Text = objG.descricao_grupo;
                }
            }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        private void bMarcas_Click(object sender, EventArgs e)
        {
            MarcasBLL objBLL;
            Marcas objM;
            try
            {
            frm_consultar frm = new frm_consultar();
            frm.Text = "Consultar Marcas";
            frm.controle = "Marcas";
            frm.ShowDialog();
            if (frm.codigo != 0)
            {
                objBLL = new MarcasBLL();
                objM = objBLL.localizar(frm.codigo);
                if (objM.cod_marca != 0)
                {
                    tbCodMarca.Text = objM.cod_marca.ToString();
                    lNome_marca.Text = objM.descricao_marca;
                }
            }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        private void tbValorCompra_Enter(object sender, EventArgs e)
        {
            try
            {
                if (tbValorCompra.Text != "")
            {
                Double val = Double.Parse(tbValorCompra.Text.Replace("R$", ""));
                tbValorCompra.Text = val.ToString();
            }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        private void tbValorCompra_Leave(object sender, EventArgs e)
        {
            try
            {
                if (tbValorCompra.Text != "")
            {
                Double val = Double.Parse(tbValorCompra.Text);
                tbValorCompra.Text = val.ToString("C2");
            }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        private void tbLocalizar_KeyPress(object sender, KeyPressEventArgs e)
        {
            ProdutosBLL objBLL;
            if (e.KeyChar == Convert.ToChar(Keys.Space))
            {
                try
                {
                    DataTable tab;
                    objBLL = new ProdutosBLL();
                    tab = objBLL.localizar(tbLocalizar.Text.Trim());
                    if (tab.Rows.Count > 0)
                    {
                        dgProdutos.DataSource = tab;
                        for (int i = 5; i < dgProdutos.Columns.Count; i++)
                            dgProdutos.Columns[i].Visible = false;
                    }
                    else
                        MessageBox.Show("Registro(s) não Encontrado(s)!", "Clientes", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
                catch (Exception ex)
                {

                    MessageBox.Show(ex.Message);
                }
            }
        }

        private void dgProdutos_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            int codigo = 0;
            ProdutosBLL objBLL = null;
            Produtos objP = null;
            try
            {
                codigo = int.Parse(dgProdutos.Rows[e.RowIndex].Cells[0].Value.ToString());
                if (codigo != 0)
                {
                    bAlterar.Enabled = true;
                    bExcluir.Enabled = true;
                    bIncluir.Enabled = false;
                    bCancelar.Enabled = true;
                    objBLL = new ProdutosBLL();
                    objP = objBLL.localizar(codigo);
                    if (objP.cod_produto != 0)
                    {
                        carregaCampos(objP);
                    }
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }

        }

        private void tbValorVenda_Enter(object sender, EventArgs e)
        {
            try
            {
                 if (tbValorVenda.Text != "")
            {
                Double val = Double.Parse(tbValorVenda.Text.Replace("R$", ""));
                tbValorVenda.Text = val.ToString();
            }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        private void tbValorVenda_Leave(object sender, EventArgs e)
        {
            try
            {
                if (tbValorVenda.Text != "")
            {
                Double val = Double.Parse(tbValorVenda.Text);
                tbValorVenda.Text = val.ToString("C2");
            }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

        private void tbComissao_Leave(object sender, EventArgs e)
        {
            try
            {
                if (tbComissao.Text != "")
                {
                    double val_compra = double.Parse(tbValorCompra.Text.Replace("R$", ""));
                    double comissao = double.Parse(tbComissao.Text);
                    tbValorVenda.Text = ((val_compra * comissao) / 100 + val_compra).ToString();
                }
                else
                {
                    tbComissao.Text = (0).ToString();
                    tbValorVenda.Text = tbValorCompra.Text.ToString();
                }
            }
            catch (Exception ex)
            {
                
                MessageBox.Show(ex.Message);
            }
        }
    }
}
